// 不支持ES6的indexOf函数的情况: 返回首个被找到的元素在数组中的索引位置，未找到则返回-1
Array.prototype.indexOf = function (searchElement, formIndex) {
  var k;
  // 调用对象不存在
  if (this == null) {
    throw new TypeError("this is null or not defined");
  }
  // 将数组转为对象{0:'', 1:'', 2:''}
  var o = Object(this);
  // 将所有非数值转换为0，所有大于等于0的数取整数部分
  var len = o.length >>> 0;
  if (len === 0){
    return -1;
  }
  var n = +formIndex || 0;
  // 无穷大
  if( Math.abs(n) === Infinity){
    n = 0;
  }

  if ( n >= len){
    return -1;
  }
  // n>0则取n, n<0则取k= len - Mach.abs(n), 且若k<0则取k=0
  k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
  while ( k < len ){
    // 找到元素searchElement在数组中的下标
    if (k in o && o[k] === searchElement ){
      return k;
    }
    k++;
  }
  return -1;
}
